// A generic onclick callback function.
function genericOnClick(info, tab) {
    console.log("item " + info.menuItemId + " was clicked");
    console.log("info: " + JSON.stringify(info));
    console.log("tab: " + JSON.stringify(tab));
}

function processEditableSelection(info, tab) {
    console.log("Item " + info.menuItemId + " was clicked");
    console.log(info.selectionText);
    chrome.tabs.sendMessage(tab.id, {"action": "transform"});
}


// Create one test item for each context type.
var contexts = ["page", "selection", "link", "editable", "image", "video", "audio"];
for (var i = 0; i < contexts.length; i++) {
    var context = contexts[i];
    var title = "Test '" + context + "' menu item";
    var id = chrome.contextMenus.create({"title": title, "contexts": [context], "onclick": genericOnClick});
    console.log("'" + context + "' item:" + id);
}

var id = chrome.contextMenus.create({"title": "Process editable's selection", "contexts": ["editable", "selection"], "onclick": processEditableSelection});

// Create a parent item and two children.
var parent = chrome.contextMenus.create({"title": "Download"});
var child1 = chrome.contextMenus.create({"title": "Child 1", "parentId": parent, "onclick": genericOnClick});
var child2 = chrome.contextMenus.create({"title": "Child 2", "parentId": parent, "onclick": genericOnClick});
console.log("parent:" + parent + " child1:" + child1 + " child2:" + child2);


// Create some radio items.
function radioOnClick(info, tab) {
    console.log("radio item " + info.menuItemId + " was clicked (previous checked state was " + info.wasChecked + ")");
}
var radio1 = chrome.contextMenus.create({"title": "Radio 1", "type": "radio", "onclick": radioOnClick});
var radio2 = chrome.contextMenus.create({"title": "Radio 2", "type": "radio", "onclick": radioOnClick});
console.log("radio1:" + radio1 + " radio2:" + radio2);

// Create some checkbox items.
function checkboxOnClick(info, tab) {
    console.log(JSON.stringify(info));
    console.log("checkbox item " + info.menuItemId + " was clicked, state is now: " + info.checked + "(previous state was " + info.wasChecked + ")");

}
var checkbox1 = chrome.contextMenus.create({"title": "Checkbox1", "type": "checkbox", "onclick": checkboxOnClick});
var checkbox2 = chrome.contextMenus.create({"title": "Checkbox2", "type": "checkbox", "onclick": checkboxOnClick});
console.log("checkbox1:" + checkbox1 + " checkbox2:" + checkbox2);


// Intentionally create an invalid item, to show off error checking in the
// create callback.
// console.log("About to try creating an invalid item - an error about item 999 should show up");
// chrome.contextMenus.create({"title": "Oops", "parentId":999}, function() {
//     if (chrome.extension.lastError) {
//         console.log("Got expected error: " + chrome.extension.lastError.message);
//     }
// });


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Clipboard
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chrome.extension.onRequest.addListener(function (request, sender, sendResponse) {
    if (request.method == "getClipData") {
        sendResponse({data: document.execCommand('paste')});
    } else {
        sendResponse({}); // snub them.
    }
});

backend = {};

chrome.storage.local.get(function (response) {

    backend.storage = response;

    backend.persist = function (storage) {
        chrome.storage.local.set(storage, function () {
            console.log("data saved to extension storage", storage);
        });
    };

    backend.clear = function () {
        chrome.storage.local.clear(function () {
            console.log("extension storage cleared");
        });
    };

    console.log("extension storage retrieved", backend.storage);
});
